package org.mixare.placesint.controleLocais.cep;

import java.io.IOException;

import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import org.xmlpull.v1.XmlPullParserException;

public class WSConnection {
	// URL do Web Service
	private static final String URL = "http://www.maniezo.com.br/webservice/soap-server.php";
	// Nome da operação responsável por buscar o CEP
	private static final String OPERATION = "traz_cep";
	// Namepace do WebService
	private static final String NAMESPACE = "http://www.maniezo.com.br/soap-server.php";
	// Nome do usuário (cadastrado no site maniezo)
	private static final String USERNAME = "aless_si";
	// Senha do usuário (cadastrado no site maniezo)
	private static final String PASSWORD = "3698520";

	// Método que recebe a string digitada pelo usuário e retorna um object
	// (CepBean)
	public static Object pesquisarCEP(String cep) {
		/*
		 * Começamos a utilizar a primeira das principais classes da bliblioteca
		 * – SoapObject (variável request) – que representará o encapsulamento
		 * da requisição que será feita ao Web Service, ou seja, o que vai
		 * “dentro�? do envelope. Ela recebe como parâmetro uma String
		 * representando o namespace referente ao WS e o nome da operação, que
		 * no nosso caso é “traz_cep�?.
		 */
		SoapObject request = new SoapObject(NAMESPACE, OPERATION);
		/*
		 * Criamos o objeto envelope que é a abstração de um envelope SOAP e
		 * passamos como parâmetro a versão do protocolo SOAP que iremos
		 * utilizar (versão 11)
		 */
		SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
				SoapEnvelope.VER11);
		// Método chamado para encapsular “requst�? como corpo do envelop SOAP a
		// ser enviado
		envelope.setOutputSoapObject(request);
		// Criação do Objeto StringBuffer para formatar os parâmetros no esquema
		// correto aceito pelo WS. Ex: “CEP#login#senha#�?
		StringBuffer params = new StringBuffer();
		params.append(cep.concat("#"));
		params.append(USERNAME.concat("#"));
		params.append(PASSWORD.concat("#"));
		// Adiciona a String “dados_cep�? que será uma espécie de chave para seu
		// valor – o parâmetro formatado.
		request.addProperty("dados_cep", params.toString());
		// Instanciamos um objeto HttpTransportSE – referente ao JSE – e
		// passamos como parâmetro a URL para acessar o WS.
		HttpTransportSE httpTransport = new HttpTransportSE(URL);

		try {
			// Chamada do métoda call com a string em branco, pois não
			// precisaremos de nenhuma SoapAction, e o envelope construído.
			httpTransport.call("", envelope);
			// Aguarda e recebe a resposta obtida na string response
			String response = (String) envelope.getResponse();
			// Casa o CEP não for encontrado retorna nulo.
			if (response.equals("#####"))
				return null;
			else {
				// Chamamos o objeto CepBean para encapsularmos osdados
				// retornados da colsulta
				String[] dadosCep = response.split("#");
				CepBean cepBean = new CepBean();
				cepBean.setTipoLogradouro(dadosCep[0]);
				cepBean.setLogradouro(dadosCep[1]);
				cepBean.setComplemento(dadosCep[2]);
				cepBean.setBairro(dadosCep[3]);
				cepBean.setCidade(dadosCep[4]);
				cepBean.setUf(dadosCep[5]);
				cepBean.setCep(cep);
				return cepBean;
			}
		} catch (IOException ioex) {
			return null;
		} catch (XmlPullParserException e) {
			return null;
		}
	}
}